package Socketserver.Medium;

import java.util.List;
import java.util.Map;

public interface MediumAbstruct {
    /**
     以下是对`ROOT`类和`ForMysql`类中所有方法的总结，包括方法功能、参数及返回值等关键信息：
     ### **一、ROOT类**
     该类主要负责数据库连接初始化、数据库/表的创建与删除，以及管理员级别的数据查询和删除操作。
     #### **1. 构造方法**
     - `public ROOT()`
     初始化类，输出数据库连接说明（驱动、URL、MySQL版本要求等）。
     - 开发者模式下默认设置用户名和密码为`root`；
     - 非开发者模式从控制台输入用户名和密码。
     #### **2.  getter方法（获取常量/字段名）**
     用于获取数据库名称、表名、字段名、驱动、URL等固定信息：
     - `getDATAABSE_NAME()`：返回数据库名`MY_SQL_SERVER`。
     - `getThe_table_name()`：返回用户表名`user_table`。
     - `getTable_password()`：返回用户表密码字段名`password`。
     - `getTable_id()`：返回用户表id字段名`id`。
     - `getTable_name()`：返回用户表name字段名`name`。
     - `getTable_type()`：返回用户表type字段名`type`。
     - `getTable_root_()`：返回用户表管理员标识字段名`is_root`。
     - `getThe_TXTTable_name()`：返回文本表名`txt_table`。
     - `getTXT_TABLE_address()`：返回文本表地址字段名`TXT_address`。
     - `getTXT_TABLE_name()`：返回文本表名称字段名`TXT_name`。
     - `getTXT_TABLE_id()`：返回文本表id字段名`TXT_id`。
     - `getTXT_TABLE_author()`：返回文本表作者字段名`TXT_author`。
     - `getDriver()`：返回数据库驱动`com.mysql.cj.jdbc.Driver`。
     - `getUrl()`：返回数据库连接URL（含参数）。
     #### **3. 用户名/密码设置与获取**
     - `setUsername(String username)`：设置SQL用户名。
     - `setPassword(String password)`：设置SQL密码。
     - `getUsername()`：返回SQL用户名。
     - `getPassword()`：返回SQL密码。
     #### **4. 数据库连接测试**
     - `public void ROOT_TEST()`
     测试数据库连接是否成功：
     - 若连接失败，设置`iT_CAN_MOVE_OR_NOT`为`false`，并输出错误信息；
     - 若成功，输出“链接sql 无异常”。
     #### **5. 数据库创建与删除**
     - `public boolean root_USE_SQL_ForOnly_CREATEDATABASE()`
     创建数据库`MY_SQL_SERVER`（若不存在），返回执行结果（注：代码中实际固定返回`false`，可能存在逻辑问题）。
     - `public void root_USE_SQL_ForOnly_DROPDATABASE()`
     删除数据库`MY_SQL_SERVER`（若存在），输出执行结果。
     #### **6. 数据表创建与删除**
     - `public void root_create_SQL_table()`
     创建用户表`user_table`（若不存在），表结构含`id`（主键）、`name`、`password`、`type`、`is_root`字段。
     - `public void root_drop_SQL_table()`
     删除用户表`user_table`（若存在），输出执行结果。
     - `public void root_create_SQLTXT_table()`
     创建文本表`txt_table`（若不存在），表结构含`TXT_id`（主键）、`TXT_name`、`TXT_address`、`TXT_author`字段。
     - `public void root_drop_SQLTXT_table()`
     删除文本表`txt_table`（若存在），输出执行结果。
     #### **7. 数据查询与删除**
     - `public void root_drop_SQL_table_FORUser(String value, String way)`
     删除用户表中符合条件的记录：
     - `way`为字段名（如`id`、`name`），`value`为匹配值；
     - 若`way`为`id`，精确匹配；其他字段模糊匹配；`way`为空时删除全表。
     - `public void root_drop_SQL_table_FORTxt(String value, String way)`
     删除文本表中符合条件的记录：
     - `way`为字段名（如`TXT_id`、`TXT_name`），`value`为匹配值；
     - 若`way`为`TXT_id`，精确匹配；其他字段模糊匹配；`way`为空时删除全表。
     - `public List<Map<String, String>> SELECT_TABLE_FOR_ALL_Table_rootss(String what_Table_name, String HOW, String value)`
     查询指定表（用户表或文本表）的记录，返回结果集：
     - `what_Table_name`为表名，`HOW`为查询字段，`value`为匹配值；
     - 无`value`时查询全表；`id`/`TXT_id`精确匹配，其他字段模糊匹配。

     ### **二、ForMysql类**
     该类封装了与MySQL的交互逻辑，提供用户表和文本表的增删改查操作，依赖`ROOT`类提供的数据库配置。
     #### **1. 构造方法**
     - `public ForMysql(Boolean iT_CAN_MOVE_OR_NOT, String Driver, String url, String Username, String getPassword, String DATABASE_NAME, String TABLE_NAME_USR, String TABLE_NAME_TXT)`
     初始化数据库连接信息（驱动、URL、用户名、密码等），仅当`iT_CAN_MOVE_OR_NOT`为`true`（连接可用）时生效。
     #### **4. 用户表（user_table）操作**
     - `public boolean INSERT_INTO_TABLE_User(String id, String name, String password, String type, int isRoot)`
     向用户表插入记录，参数为用户信息（`id`、`name`、`password`、`type`、`is_root`），返回插入结果。
     - `public boolean DELETE_TABLE_User_What(String what, String equals_what)`
     删除用户表中符合条件的记录：`what`为字段名，`equals_what`为匹配值，返回删除结果。
     - `public boolean ALTER_TABLE_User_What(String what, String equals_what, String chang_data)`
     修改用户表中符合条件的记录：`what`为字段名，`equals_what`为旧值，`chang_data`为新值，返回修改结果。
     #### **5. 文本表（txt_table）操作**
     - `public boolean INSERT_INTO_TABLE_txt(String id, String name, String address, String author)`
     向文本表插入记录，参数为文本信息（`TXT_id`、`TXT_name`、`TXT_address`、`TXT_author`），返回插入结果。
     - `public boolean DELETE_TABLE_txt_What(String what, String equals_what, String author)`
     删除文本表中符合条件的记录（仅`author`为`root`时允许操作），返回删除结果。
     - `public boolean ALTER_TABLE_txt_What(String what, String equals_what, String chang_data)`
     修改文本表中符合条件的记录：`what`为字段名，`equals_what`为旧值，`chang_data`为新值，返回修改结果。
     #### **6. 数据查询操作**
     - `public List<Map<String, String>> SELECT_FROM_FIND_MY_Account(String value, String HOW)`
     查询用户表记录，返回结果集（隐藏`id`敏感信息）：
     - 无`value`时查询全表；`id`精确匹配，其他字段模糊匹配。
     - `public List<Map<String, String>> SELECT_FROM_FIND_MY_TXT(String value, String HOW)`
     查询文本表记录，返回结果集（隐藏`TXT_id`敏感信息）：
     - 无`value`时查询全表；`TXT_id`精确匹配，其他字段模糊匹配。
     */

    //如果函数中需要 数据库名称、表名、字段名、驱动、URL等固定信息：用root 中的get方法获取
    //我们这里只收从客户端 外传的信息
    //这里是服务端 不可能 用System.out.print 把错误信息搞到你那里
    /**
     * Medium 权力方法:
     */
    boolean Medium_POWER_login(String password,String type);//1.登录【我会保留你的信息直到你退出】
    boolean Medium_POWER_register(String name,String password,String type);//2.注册User


    /**
     * user权力方法
     * 用String USER_id 作为判断的依据 不能让外人登录
     */
    //1.添加
        boolean User_POWER_ADD_Account_(String USER_id,String name,String password,String type);//1.单行添加user(账号) 注册
        boolean User_POWER_ADD_TXT_(String USER_id,String TXT_name,String author,byte[] File_byte);//2.添加作品[]
    //2.删除
        boolean User_POWER_DELETE_Account_(String USER_id);//1.单行删除 自己的账号
        boolean User_POWER_DELETE_TXT_(String TXT_ID,String USER_id);//2.删除 自己的文案[id选择]
    //3.修改
        boolean User_POWER_UPDATE_Account_(String USER_id,String key,String value);//1.单行修改自己的账号(账号)
        boolean User_POWER_UPDATE_TXT_(String USER_id,String TXT_key,String TXT_value);//2.修改自己的文案
    //4.查询
        List<Map<String, String>> User_POWER_SELECT_FROM_user_(String USER_id);//1.查看自己的账号信息
        List<Map<String, String>> User_POWER_SELECT_FROM_txt_(String USER_id);//2.所有可以看的文章
    //5.分段查看文章的内容 难度太大 未实现
    /**
     * 5.分段查看文章的内容
     * @param USER_id 操作用户ID（验证权限）
     * @param TXT_ID 要查看的文本ID
     * @param pageNum 页码（从1开始）
     * @param pageSize 每页字节数（每次读取的最大字节量）
     * @return 分段结果：包含内容、总页数、当前页码、错误信息等
     */
    Map<String, Object> User_POWER_SELECT_TXT_BY_PAGE(String USER_id, String TXT_ID, int pageNum, int pageSize);


    /**
     * 1.增加
     * 2.删除
     * 3.修改
     *      1.root 没有这个 只能在 增加 删除的基础上 改
     * 4.查询
     *      1.用户查询
     *      2.TXT查询
     */
    /**
     * root 权力方法
     * 用String ROOT_id 作为判断的依据 不能让外人登录
     */
    //1.格式化
    void ROOT_POWER_RESTART(String ROOT_id);//表格式化
    //2.删除
        void ROOT_POWER_DELETE_user_(String ROOT_id,String User_key,String User_value);//删除用户
        void ROOT_POWER_DELETE_txt_(String ROOT_id,String TXT_key,String TXT_value);//删除TXT
    //3.修改【指删除再 重新添加】
        void ROOT_POWER_UPDATE_txt_(String ROOT_id,String TXT_key,String TXT_value);//1.root 没有这个 只能在 增加 删除的基础上 改
        void ROOT_POWER_UPDATA_user_(String ROOT_id,String User_key,String User_value);//1.root 没有这个 只能在 增加 删除的基础上 改
    //4.查询
        List<Map<String, String>> ROOT_POWER_SELECT_FROM_user_(String USER_id,String User_key,String User_value);//1.查看所有账号信息
        List<Map<String, String>> ROOT_POWER_SELECT_FROM_txt_(String USER_id,String TXT_key,String TXT_value);//2.所有可以看的文章
}
